/**
 * losenote.com Inc.
 * Copyright (c) 2013-2013 All Rights Reserved.
 */
package com.losenote.base.template;

import com.losenote.service.result.LnResult;

/**
 * 
 * @author danjingyu
 * @version $Id: ServiceTemplate.java, v 0.1 2013-4-21 下午1:39:31 danjingyu Exp $
 */
public interface ServiceTemplate {
    /**
     * <pre> 无事务模板执行业务处理
     * 1. 异常捕获，及分类处理
     * 2. 业务日志记录
     * </pre>
     * 
     * @param <T>
     * @param clazz  返回对象
     * @param action 业务操作回调的接口
     * @return       服务返回对象
     */
    public <T> T executeWithoutTransaction(Class<? extends LnResult> clazz, ServiceCallback action);

    /**
     * <pre> 支持本地事务模板执行业务处理
     * 1. 本地事务封装
     * 2. 异常捕获，及分类处理
     * 3. 业务日志记录
     * </pre>
     * 
     * @param <T>
     * @param clazz  返回对象
     * @param action 业务操作回调的接口
     * @return       服务返回对象
     */
    public <T> T execute(Class<? extends LnResult> clazz, ServiceCallback action);
}
